package com.shujia.mysql;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;

public class Demo2InsertIntoMySQL {
    /**
     * 1、创建student_like表
     * 2、读取students.txt文件
     * 3、将数据插入student_like表
     */
    public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
        // 加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 创建连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/db1?useSSL=false", "root", "123456");

        // 创建Statement
        Statement st = conn.createStatement();
        st.execute("create table if not exists student_like like student");
        st.execute("truncate table student_like");

        // 创建prepareStatement
        PreparedStatement preSt = conn.prepareStatement("insert into student_like values(?,?,?,?,?)");

        // 读取数据
        BufferedReader br = new BufferedReader(new FileReader("data/students.txt"));
        String line;

        int cnt = 0;
        int BatchSize = 100;

        while ((line = br.readLine()) != null) {
            String[] splits = line.split(",");
            int id = Integer.parseInt(splits[0]);
            String name = splits[1];
            int age = Integer.parseInt(splits[2]);
            String gender = splits[3];
            String clazz = splits[4];

            // 设置参数
            preSt.setInt(1, id);
            preSt.setString(2, name);
            preSt.setInt(3, age);
            preSt.setString(4, gender);
            preSt.setString(5, clazz);

            // 执行 插入 相当于执行了 1000次 insert 语句 （逐条插入）
            //            preSt.executeUpdate();
            // 使用批量插入，将每一条数据放入一个Batch
            preSt.addBatch();

            cnt++;
            // 每达到BatchSize大小即触发一次插入
            if (cnt == BatchSize) {
                preSt.executeBatch();
                cnt = 0;
            }
        }

        // 执行 批量插入
        preSt.executeBatch();

        // 关闭连接
        st.close();
        preSt.close();
        conn.close();


    }
}
